본문으로 건너뛰기

토큰 기반 인증

인증 정보를 클라이언트가 직접 들고 있는 방식

  • 인증 정보가 토큰의 형태로 브라우저의 로컬 스토리지(혹은 쿠키)에 저장된다.
  • Token 기반 인증의 방법으로 많은 웹 서버들은 JWT(Json Web Token)를 사용한다.
  • Token 기반 인증 방식은 유저의 정보가 서버에 저장되지 않으며, 서버는 유저 인증을 위해 많은 일들을 하지 않아도 된다.

🧑🏻‍💻 동작 과정


토큰 기반 인증 동작 과정
  1. 유저가 로그인을 요청하고 정보가 유효하다면 서버에서 Secret Key를 사용해서 유저에게 토큰을 발급한다.

  2. 클라이언트는 발급 받은 토큰을 저장하고, 서버에서 요청 할 때 마다, 해당 토큰을 함께 서버에 전달한다.

    • 액세스 토큰은 HTTP 헤더, 쿼리 매개변수 또는 쿠키 등을 통해 전달된다. (JWT는 액세스 토큰의 형식 중 하나이다.)

    ✏️ 액세스 토큰 구조

    토큰 기반 인증 동작 과정
    • header: 토큰을 어떻게 검증할지에 대한 내용을 담고 있다.

    • payload: 토큰에 담긴 사용자 정보 등의 데이터가 저장되어 있다. 일반적으로 사용자 정보와 토큰의 유효 기간 등을 포함한다.

    • signature: 서명 부분은 토큰의 무결성을 보장하기 위해 사용된다. 서명은 header와 payload를 함께 해시하여 생성된다. 서명을 생성하려면 서버 또는 인증 서버에 고유한 비밀 키가 필요하다. 이 서명은 토큰을 변조하기 어렵게 한다.

  3. 서버는 토큰을 검증 하고, 요청에 응답한다.

  4. 액세스 토큰이 만료되면, 클라이언트는 서버에서 새로운 액세스 토큰을 요청한다.

  5. 사용자가 로그아웃하거나 권한이 박탈된 경우, 서버는 해당 액세스 토큰을 무효화한다.

🧑🏻‍💻 장단점


✅ 장점

  • 클라이언트에 토큰이 저장되어 있기 때문에 서버의 메모리에 부담이 되지 않는다.
  • 서버 확장성이 용이하고 여러 서버 간의 세션 공유 문제가 없다.
  • 멀티 디바이스 환경에 대한 부담이 없다.

✅ 단점

  • 클라이언트 측에서 토큰을 보관해야 하므로 토큰을 안전하게 관리해야 한다.
  • 토큰을 생성하고 관리하는 추가적인 작업이 필요하므로 구현 및 유지 관리가 복잡할 수 있다.
  • 토큰은 자체적으로 세션을 관리하지 않으므로 세션 만료나 로그아웃과 같은 작업을 직접 구현해야 한다.